package com.itstu.gulimall.seckill;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * 1. 整合Sentinel
 *   1） 导入依赖
 *   2） 下载sentinel控制台
 *   3)  配置sentinel控制地址信息
 *   4） 在控制台调整参数。【默认所有流量控制信息保存在内存中，重启就会失效】
 *
 * 2. 每个服务导入actuator：并配置management.endpoints.web.exposure.include=*
 *
 * 3. 自定义sentinel的流控返回数据
 *
 * 4. 使用sentinel来保护fegin的远程调用，熔断
 *   1） 调用方的熔断保护， feign.sentinel.enabled=true
 *   2） 调用方手动指定远程服务的降级策略，远程服务被降级处理，触发设置好的熔断回调方法
 *   3） 超大浏览的时候，必须牺牲一定的远程服务，在服务的提供方指定降级策略，提供方在运行，但不运行自己的业务逻辑，
 *   返回的是默认的降级数据。
 * 5. 自定义受保护的资源
 *   1）   try (Entry entry = SphU.entry("resourceName")) {} catch (BlockException ex) {}
 *   2）  注解方式   @SentinelResource(blockHandler = "blockHandlerForGetUser")
 *
 *		注意：上面两种方法，一定要设置限流之后的默认返回
 *	  （ WebCallbackManager.setUrlBlockHandler）	设置的是请求的统一返回。
 */
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
@EnableFeignClients
//@EnableRabbit 如果该服务只是发送消息，就不用这个注解
public class GulimallSeckillApplication {

	public static void main(String[] args) {
		SpringApplication.run(GulimallSeckillApplication.class, args);
	}

}
